package com.army.study.devices;

import com.army.study.ResourceTable;
import ohos.agp.components.*;
import ohos.app.Context;
import ohos.distributedschedule.interwork.DeviceInfo;

import java.util.List;
import java.util.Optional;

public class DevicesListAdapter extends BaseItemProvider {
    // 开始下标从0开始
    private static final int SUBSTRING_START = 0;
    // 结束下标为4
    private static final int SUBSTRING_END = 4;
    // 设备信息列表
    private List<DeviceInfo> deviceInfoList;
    // 当前上下文
    private Context context;

    // 带参构造方法
    public DevicesListAdapter(List<DeviceInfo> deviceInfoList, Context context) {
        this.deviceInfoList = deviceInfoList;
        this.context = context;
    }

    @Override
    public int getCount() {
        return deviceInfoList == null ? 0 : deviceInfoList.size();
    }

    @Override
    public Object getItem(int i) {
        return Optional.of(deviceInfoList.get(i));
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public Component getComponent(int i, Component component, ComponentContainer componentContainer) {
        // 定义设备视图内部类
        ViewHolder viewHolder = null;
        // 定义组件
        Component mComponent = component;
        // 组件为空时
        if (mComponent == null) {
            // 查找设备列表项布局XML
            mComponent = LayoutScatter.getInstance(context).parse(ResourceTable.Layout_item_device_list, null, false);
            // 初始化设备视图类
            viewHolder = new ViewHolder();
            // 判断组件布局里是否包含设备名称文本组件
            if (mComponent.findComponentById(ResourceTable.Id_device_name) instanceof Text) {
                // 获取设备列表项布局XML的设备名称文件组件,并赋值给内部类设备视图设备名称属性缓存
                viewHolder.devicesName = (Text) mComponent.findComponentById(ResourceTable.Id_device_name);
            }
            // 判断组件布局里是否包含设备Id文本组件
            if (mComponent.findComponentById(ResourceTable.Id_device_id) instanceof Text) {
                // 获取设备列表项布局XML的设备Id文件组件,并赋值给内部类设备视图设备Id属性缓存
                viewHolder.devicesId = (Text) mComponent.findComponentById(ResourceTable.Id_device_id);
            }
            mComponent.setTag(viewHolder);
        } else {
            // 如果组件不为空, 并且标签包含内部类设备视图
            if (mComponent.getTag() instanceof ViewHolder) {
                // 从组件标签获取出设备视图
                viewHolder = (ViewHolder) mComponent.getTag();
            }
        }
        // 设备视图不为空时
        if (viewHolder != null) {
            // 设置设备名称内容
            viewHolder.devicesName.setText(deviceInfoList.get(i).getDeviceName());
            String deviceId = deviceInfoList.get(i).getDeviceId();
            deviceId = deviceId.substring(SUBSTRING_START, SUBSTRING_END) + "******"
                    + deviceId.substring(deviceId.length() - SUBSTRING_END);
            // 设置设备名称Id
            viewHolder.devicesId.setText(deviceId);
        }
        return mComponent;
    }

    /**
     * 内部类, 设备视图
     */
    private static class ViewHolder {
        // 设备名称
        private Text devicesName;
        // 设备Id
        private Text devicesId;
    }
}
